/**
 * OBJ_SHOT֐
 * 
 * @param {Integer} x     exW
 * @param {Integer} y     eyW
 * @param {Integer} speed x
 * @param {Integer} angle px
 * @param {Integer} graph 摜
 * @param {Integer} delay xt[
 * @return {Object} 쐬IuWFNgid
 */
function CreateObjShot( x, y, speed, angle, graph, delay ){
	let obj = Obj_Create( OBJ_SHOT );
	Obj_SetPosition( obj, x, y );
	Obj_SetSpeed( obj, speed );
	Obj_SetAngle( obj, angle );
	ObjShot_SetGraphic( obj, graph );
	ObjShot_SetDelay( obj, delay );
	
	return obj;
}

/**
 * OBJ_LASER֐
 * 
 * @param {Integer} x     exW
 * @param {Integer} y     eyW
 * @param {Integer} speed x
 * @param {Integer} angle px
 * @param {Integer} lng   
 * @param {Integer} wid   
 * @param {Integer} graph 摜
 * @param {Integer} delay xt[
 * @param {Boolean} src   ̗L
 * @return {Object} 쐬IuWFNgid
 */
function CreateObjLaser( x, y, speed, angle, lng, wid, graph, delay, src ){
	let obj = Obj_Create( OBJ_LASER );
	Obj_SetPosition( obj, x, y );
	Obj_SetSpeed( obj, speed );
	Obj_SetAngle( obj, angle );
	ObjShot_SetGraphic( obj, graph );
	ObjShot_SetDelay( obj, delay );
	ObjLaser_SetLength( obj, lng );
	ObjLaser_SetWidth( obj, wid );
	ObjLaser_SetSource( obj, src );
	
	return obj;
}

/**
 * OBJ_SINUATE_LASER֐
 * 
 * @param {Integer} x     exW
 * @param {Integer} y     eyW
 * @param {Integer} speed x
 * @param {Integer} angle px
 * @param {Integer} lng   
 * @param {Integer} wid   
 * @param {Integer} graph 摜
 * @param {Integer} delay xt[
 * @return {Object} 쐬IuWFNgid
 */
function CreateObjSinuateLaser( x, y, speed, angle, lng, wid, graph, delay ){
	let obj = Obj_Create( OBJ_SINUATE_LASER );
	Obj_SetPosition( obj, x, y );
	Obj_SetSpeed( obj, speed );
	Obj_SetAngle( obj, angle );
	ObjShot_SetGraphic( obj, graph );
	ObjShot_SetDelay( obj, delay );
	ObjSinuateLaser_SetLength( obj, lng );
	ObjSinuateLaser_SetWidth( obj, wid );
	
	return obj;
}

/**
 * OBJ_EFFECT֐
 * 
 * @param {String}  effectimg 摜
 * @param {Integer} x         SxW
 * @param {Integer} y         SyW
 * @param {Integer} cutx      ؂o_xl
 * @param {Integer} cuty      ؂o_yl
 * @param {Integer} imgx      摜X
 * @param {Integer} imgy      摜Y
 * @param {Integer} layer     \C[
 * @param {Integer} alpha     l
 * @param {Integer} r         Rl
 * @param {Integer} g         Gl
 * @param {Integer} b         Bl
 * @return {Object} 쐬IuWFNgid
 */
function CreateObjEffect( effectimg, x, y, cutx, cuty, imgx, imgy, layer, alpha, r, g, b ){
	let ImgXHalf = imgx / 2;
	let ImgYHalf = imgy / 2;
	
	let obj = Obj_Create( OBJ_EFFECT );
	ObjEffect_SetTexture( obj, effectimg );
	ObjEffect_SetPrimitiveType( obj, PRIMITIVE_TRIANGLESTRIP );
	ObjEffect_CreateVertex( obj, 4 );
	
	ObjEffect_SetVertexXY( obj, 0, -ImgXHalf, -ImgYHalf );
	ObjEffect_SetVertexXY( obj, 1, -ImgXHalf,  ImgYHalf );
	ObjEffect_SetVertexXY( obj, 2,  ImgXHalf, -ImgYHalf );
	ObjEffect_SetVertexXY( obj, 3,  ImgXHalf,  ImgYHalf );
	
	ObjEffect_SetVertexUV( obj, 0,        cutx,        cuty );
	ObjEffect_SetVertexUV( obj, 1,        cutx, cuty + imgy );
	ObjEffect_SetVertexUV( obj, 2, cutx + imgx,        cuty );
	ObjEffect_SetVertexUV( obj, 3, cutx + imgx, cuty + imgy );
	
	ObjEffect_SetVertexColor( obj, 0, alpha, r, g, b );
	ObjEffect_SetVertexColor( obj, 1, alpha, r, g, b );
	ObjEffect_SetVertexColor( obj, 2, alpha, r, g, b );
	ObjEffect_SetVertexColor( obj, 3, alpha, r, g, b );
	
	ObjEffect_SetLayer( obj, layer );
	
	Obj_SetPosition( obj, x, y );
	
	return obj;
}
